﻿#ifndef HEX4ESP_H
#define HEX4ESP_H

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "esp_log.h"

#define memcpy_s(a,b,c,d) memcpy(a,c,d)
#define sprintf_s snprintf

#ifndef MAX_PATH
#define MAX_PATH 256
#endif

#ifndef TRUE
#define TRUE 1
#endif

#ifndef FALSE
#define FALSE 0
#endif

#ifndef GetLastError
#define GetLastError() errno
#endif

#ifndef gettid
#define gettid getpid
#endif

#define fn_RYN_LOG_DEBUG ESP_LOGD
#define fn_RYN_LOG_INFO ESP_LOGI
#define fn_RYN_LOG_ERROR ESP_LOGE
#define fn_RYN_LOG_WARN ESP_LOGW
#define SHB_READ_TIME				8000

#ifndef NULL 
#define NULL 0
#endif

#ifndef RYnFree
#define RYnFree(x)							\
	do{										\
		if(x){								\
			free((void *)x);				\
			x = NULL;						\
		}									\
	}while(0);
#endif

#define RYnMalloc(x) malloc(x);

#define FreeMem(x)							\
	do{										\
		if(x){								\
			free(x);						\
			x = NULL;						\
		}									\
	}while(0);

// 分配结构体类型内存空间
#define MallocMem(type,rt)					\
	do{										\
		rt = (type *)malloc(sizeof(type));	\
		memset(rt,0,sizeof(type));			\
	}while(0);

#define MemArrayReset(arr)					\
do{											\
	memset(arr,0,sizeof(arr));				\
}while(0);

#define MemTextCopy(dst,src)					\
	do{											\
	memcpy_s(dst,strlen(src),src,strlen(src));				\
	}while(0);

#define FreeBuf FreeMem

// 分配指针类型内存空间
#define MallocBuf(type,rt,len)				 \
	do{										 \
	rt = (type *)malloc(len);		 		 \
	memset(rt,0,len);        \
	}while(0);

#define EquSTR(str1,str2) (strcmp(str1,str2) == 0)
#define FileExists(filename) (access(filename,F_OK) == 0)
// 逻辑循环左移
#define MoveLeftByte(bytes,k)				 \
	do{										 \
		int i = 0,t = 0,n = 0,j=0;			 \
		for(i=0;i<k;i++)					 \
		{  									 \
			t=a[0];							 \
			for(j=0;j<n-1;j++)				 \
				a[j]=a[j+1];				 \
			a[n-1]=t;						 \
		}									 \
	}while(0);

// 逻辑循环右移
#define MoveRightByte(bytes,k)				 \
	do{										 \
		int i = 0,t = 0,n = 0,j=0;			 \
		for(i=0;i<k;i++)					 \
		{  									 \
			t=bytes[n-1];					 \
			for(j=n-1;j>0;j--)				 \
				bytes[j]=bytes[j-1];		 \
			bytes[0]=t;						 \
		}									 \
	}while(0);

#endif


void split(char *src, const char *separator, char **dest, int *destnum);

/************************************************************************/
/* 字节流转换为十六进制字符串                                             */
/************************************************************************/
void ByteToHexStr(const unsigned char* source, char* dest, int sourceLen);

/************************************************************************/
/* 十六进制字符串转换为字节流                                             */
/************************************************************************/
void HexStrToByte(const char* source, unsigned char* dest, int sourceLen);

int GetHostByName(unsigned char *ip_buffer, unsigned char *domain);

unsigned long long fn_GetSystemTime();